ECSコンソールからコンテナのログをCloudWatch Logsにコンテナ単位で配信する方法を教えてください
困っていた内容
ECSコンソール上で、「新しいタスク定義の作成」にて2つ以上のコンテナを作成しましたが、コンテナのログが1つのロググループに配信されてしまいます。
ログ出力をコンテナごとに振り分けてCloudWatch Logsに配信したいのですが、コンソールから設定ができません。
どう対応すればいいの?
コンテナのログ情報を CloudWatch Logs に送信するには、logConfiguration パラメータを設定する必要があります。
コンソール上で、「新しいタスク定義の作成」にて2つ以上のコンテナを作成した場合、ログ配信先は1つしか設定できないため、 どのコンテナにも同じlogConfiguration パラメータが設定されてしまいます。
そのため、タスク定義のJSONを修正する必要があります。
手順
[1] 事前にCloudWatchにて、配信先のロググループを作成しておきます。
[2] 「ECS」→「タスク定義」→「新しいリビジョンの作成」→「JSON で新しいリビジョンを作成」 を選択します。
[3] 以下のようなlogConfigurationパラメーターがコンテナごとに設定されているので、各値を「手順1」で作成したロググループに変更します。
"logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "true", "awslogs-group": "/ecs/test", "awslogs-region": "us-west-2", "awslogs-stream-prefix": "ecs" } }
[4] 新規作成されたリビジョンをタスクに設定します。
結果
ログがコンテナごとに別々のロググループに配信されていることが、CloudWatchで確認できました。
参考資料
コンソールを使用したタスク定義の更新 - Amazon Elastic Container Service
awslogs ログドライバーの使用 - Amazon Elastic Container Service
ECS コンテナログが CloudWatch Logs に配信されない原因のトラブルシューティング | AWS re:Post